
function dumpInstance(instance) {
    try {
        var jclazz = instance.getClass();
        var className = jclazz.getName();
        console.log(`\n====== 开始打印实例 ${className}@${instance.hashCode()} 的信息 ======`);

        function dumpInstance(instance) {
            try {
                try {
                    var Gson = Java.use('com.google.gson.Gson');
                    var gson = Gson.$new();
                    console.log("获取gson成功");
                } catch (error) {
                    console.log("获取gson失败");
                }
                var jclazz = instance.getClass();
                var className = jclazz.getName();
                console.log(`\n====== 开始打印实例 ${className}@${instance.hashCode()} 的信息 ======`);
        
                // --- 打印字段 ---
                console.log("  [+] 字段 (Fields):");
                var fields = jclazz.getDeclaredFields();
                if (fields.length === 0) {
                    console.log("    无字段");
                } else {
                    fields.forEach(function(field) {
                        try {
                            // 修正：对单个 field 设置 setAccessible
                            field.setAccessible(true);
                            
                            var fieldName = field.getName();
                            var fieldType = field.getType().getName();
                            
                            // 核心修正：从 instance 对象中获取字段值
                            var fieldValue = field.get(instance); 
                            
                            // 对值进行更友好的展示
                            var fieldValueStr =fieldValue;
                            if (fieldValue && typeof fieldValue.toString === 'function') {
                                 try {
                                   //fieldValueStr = fieldValue.toString();
                                   fieldValueStr = gson.LJIILL(fieldValueStr);
                                 } catch (e) {
                                     // toString 可能会失败，例如对于一些代理类
                                     fieldValueStr = `[无法调用 toString(): ${e.message}]`;
                                 }
                            }
                            
                            console.log(` =======${fieldName}  (${fieldType}): ${fieldValueStr}\n\n\n\n`);
                        } catch (e) {
                            console.log(`    获取字段 ${field.getName()} 的值失败: ${e.message}`);
                        }
                    });
                }
        
                // --- 打印方法 ---
                console.log("\n  [+] 方法 (Methods):");
                var methods = jclazz.getDeclaredMethods();
                if (methods.length === 0) {
                    console.log("    无方法");
                } else {
                    methods.forEach(function(method) {
                        var methodName = method.getName();
                        var returnType = method.getReturnType().getName();
                        var parameterTypes = method.getParameterTypes().map(function (p) { return p.getName(); }).join(", ");
                        console.log(`    ${methodName}(${parameterTypes}): ${returnType}`);
                    });
                }
                console.log(`====== 实例 ${className}@${instance.hashCode()} 信息打印完毕 ======\n`);
        
            } catch (e) {
                console.log(`dumpInstance 失败：${e}`);
            }
        }
        
        
        // 主逻辑
        Java.perform(function() {
            var className = "X.DBo";
            console.log(`正在处理类: ${className}`);
            // --- 主动搜索内存中已经存在的实例 ---
            console.log(` 使用 Java.choose 搜索已存在的 ${className} 实例...`);
            var i =0;
            Java.choose(className, {
                onMatch: function(instance) {
                    // 找到一个匹配的实例
                    console.log(`[+] Java.choose 发现一个实例: ${instance}`);
                    dumpInstance(instance);
                    // 如果你只关心第一个找到的实例，可以返回 "stop" 来提前终止搜索
                    // return "stop"; 
                    i++
                    return "stop";
                },
                onComplete: function() {
                    // 搜索完成
                    console.log(" 实例搜索完毕。共有实例："+ i +"个");
                }
            });
        });
        // --- 打印字段 ---
        console.log("  [+] 字段 (Fields):");
        var fields = jclazz.getDeclaredFields();
        if (fields.length === 0) {
            console.log("    无字段");
        } else {
            fields.forEach(function(field) {
                try {
                    // 修正：对单个 field 设置 setAccessible
                    field.setAccessible(true);
                    
                    var fieldName = field.getName();
                    var fieldType = field.getType().getName();
                    
                    // 核心修正：从 instance 对象中获取字段值
                    var fieldValue = field.get(instance); 
                    
                    // 对值进行更友好的展示
                    var fieldValueStr =fieldValue;
                    if (fieldValue && typeof fieldValue.toString === 'function') {
                         try {
                           //fieldValueStr = fieldValue.toString();
                           fieldValueStr = gson.fieldValueStr;
                         } catch (e) {
                             // toString 可能会失败，例如对于一些代理类
                             fieldValueStr = `[无法调用 toString(): ${e.message}]`;
                         }
                    }
                    
                    console.log(`    ${fieldName} (${fieldType}): ${fieldValueStr}`);
                } catch (e) {
                    console.log(`    获取字段 ${field.getName()} 的值失败: ${e.message}`);
                }
            });
        }

        // --- 打印方法 ---
        console.log("\n  [+] 方法 (Methods):");
        var methods = jclazz.getDeclaredMethods();
        if (methods.length === 0) {
            console.log("    无方法");
        } else {
            methods.forEach(function(method) {
                var methodName = method.getName();
                var returnType = method.getReturnType().getName();
                var parameterTypes = method.getParameterTypes().map(function (p) { return p.getName(); }).join(", ");
                console.log(`    ${methodName}(${parameterTypes}): ${returnType}`);
            });
        }
        console.log(`====== 实例 ${className}@${instance.hashCode()} 信息打印完毕 ======\n`);

    } catch (e) {
        console.log(`dumpInstance 失败：${e}`);
    }
}


// 主逻辑
Java.perform(function() {
    var className = "X.DBo";
    console.log(`正在处理类: ${className}`);
    // --- 主动搜索内存中已经存在的实例 ---
    console.log(` 使用 Java.choose 搜索已存在的 ${className} 实例...`);
    var i =0;
    Java.choose(className, {
        onMatch: function(instance) {
            // 找到一个匹配的实例
            console.log(`[+] Java.choose 发现一个实例: ${instance}`);
            dumpInstance(instance);
            // 如果你只关心第一个找到的实例，可以返回 "stop" 来提前终止搜索
            // return "stop"; 
            i++
            return "stop"
        },
        onComplete: function() {
            // 搜索完成
            console.log(" 实例搜索完毕。共有实例："+ i +"个");
        }
    });

    
});